﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0090_NumberOfArithmeticSlices : IAlgorithm
    {
        // 413. 等差数列划分

        // 如果一个数列 至少有三个元素 ，并且任意两个相邻元素之差相同，则称该数列为等差数列。
        // - 例如，[1,3,5,7,9]、[7,7,7,7] 和[3, -1, -5, -9] 都是等差数列。
        // 给你一个整数数组 nums ，返回数组 nums 中所有为等差数组的 子数组 个数。
        // 子数组 是数组中的一个连续序列。

        // 提示：
        //  1 <= nums.length <= 5000
        //  -1000 <= nums[i] <= 1000

        public void Test()
        {
            // 算法参数定义
            var nums = new int[] { };
            // 算法执行与打印
            Console.WriteLine(NumberOfArithmeticSlices(nums));
            //var res = Algorithm(param);
            //foreach (var item in res)
            //{
            //    foreach (var iitem in item)
            //    {
            //        Console.Write(iitem + " ");
            //    }
            //    Console.WriteLine();
            //}
        }

        // 算法
        public int NumberOfArithmeticSlices(int[] nums)
        {
            if (nums.Length < 3)
                return 0;
            int ans = 0, count = 1, dif = nums[1] - nums[0];
            for (int i = 2; i < nums.Length; i++)
            {
                int temp = nums[i] - nums[i - 1];
                if (temp == dif)
                    count++;
                else
                {
                    ans += GetNum(count);
                    count = 1;
                    dif = temp;
                }
            }
            ans += GetNum(count);
            return ans;
        }
        public int GetNum(int i)
        {
            if (i == 1) 
                return 0;
            return i * (i - 1) / 2;
        }
    }
}
